// using System;
// using Extensions.FPMath;
// using Unity.Properties.UI;
// using UnityEditor;
// using UnityEditor.UIElements;
// using UnityEngine;
// using UnityEngine.UIElements;
//
// namespace FPMath.Editor
// {
//     public class FPInspector : Inspector<FP>
//     {
//         public const int DefaultPrecision = 5;
//
//         public static StyleSheet StyleSheet =
//             AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Extensions/FPMath/Editor/Styles/FPInspectors.uss");
//
//         public static float GetRawAsFloat(long rawValue)
//         {
//             var f = FP.FromRaw(rawValue);
//             var precision = DefaultPrecision;
//             var v = (Single) Math.Round(f.AsFloat, precision);
//             return v;
//         }
//
//         public bool Draw(VisualElement root, string label)
//         {
//             // grab value
//             var v = GetRawAsFloat(Target.RawValue);
//
//             // edit value
//             try
//             {
//                 var floatField = new FloatField(label);
//                 floatField.value = v;
//
//                 var labelField = new Label("(FP)");
//                 labelField.name = "FP-Name";
//
//                 var inputField = floatField.Q<VisualElement>("unity-text-input");
//                 inputField.Add(labelField);
//
//                 floatField.RegisterValueChangedCallback(evt => { Target = FP.FromFloat(evt.newValue); });
//
//                 root.Add(floatField);
//                 return true;
//             }
//             catch (FormatException exp)
//             {
//                 if (exp.Message != ".")
//                 {
//                     Debug.LogException(exp);
//                 }
//             }
//
//             return false;
//         }
//
//         public override VisualElement Build()
//         {
//             VisualElement root = new VisualElement();
//             root.styleSheets.Add(StyleSheet);
//             root.name = "FP-Root";
//
//             Draw(root, Name);
//             // Draw(root, Name);
//             // Draw(root, Name);
//             // Draw(root, Name);
//             return root;
//         }
//     }
//
//
//     public class FPVector2Inspector : Inspector<FPVector2>
//     {
//         public const int DefaultPrecision = 5;
//         public static StyleSheet StyleSheet =
//             AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Extensions/FPMath/Editor/Styles/FPInspectors.uss");
//
//         public const string FPVECTOR2_X = "X";
//         public const string FPVECTOR2_Y = "Y";
//         
//         public const string LABEL_X = "FP-Label-X";
//         public const string LABEL_Y = "FP-Label-Y";
//
//         public static float GetRawAsFloat(long rawValue)
//         {
//             var f = FP.FromRaw(rawValue);
//             var precision = DefaultPrecision;
//             var v = (Single) Math.Round(f.AsFloat, precision);
//             return v;
//         }
//
//         public bool Draw(VisualElement parent)
//         {
//             // grab value
//             var vx = GetRawAsFloat(Target.x.RawValue);
//             var vy = GetRawAsFloat(Target.y.RawValue);
//
//             // edit value
//             try
//             {
//                 var floatFieldX = new FloatField(FPVECTOR2_X);
//                 floatFieldX.labelElement.name = LABEL_X;
//                 floatFieldX.value = vx;
//
//                 var labelFieldX = new Label("(FP)");
//                 labelFieldX.name = "FP-Name";
//
//                 var inputFieldX = floatFieldX.Q<VisualElement>("unity-text-input");
//                 inputFieldX.Add(labelFieldX);
//
//                 floatFieldX.RegisterValueChangedCallback(evt =>
//                 {
//                     Target = new FPVector2(FP.FromFloat(evt.newValue), Target.y);
//                 });
//                 
//                 
//                 var floatFieldY = new FloatField(FPVECTOR2_Y);
//                 floatFieldY.labelElement.name = LABEL_Y;
//                 floatFieldX.value = vy;
//
//                 var labelFieldY = new Label("(FP)");
//                 labelFieldY.name = "FP-Name";
//
//                 var inputFieldY = floatFieldY.Q<VisualElement>("unity-text-input");
//                 inputFieldY.Add(labelFieldY);
//
//                 floatFieldY.RegisterValueChangedCallback(evt =>
//                 {
//                     Target = new FPVector2(Target.x, FP.FromFloat(evt.newValue));
//                 });
//
//                 parent.Add(floatFieldX);
//                 parent.Add(floatFieldY);
//                 return true;
//             }
//             catch (FormatException exp)
//             {
//                 if (exp.Message != ".")
//                 {
//                     Debug.LogException(exp);
//                 }
//             }
//
//             return false;
//         }
//
//         public override VisualElement Build()
//         {
//             VisualElement root = new VisualElement();
//             root.styleSheets.Add(StyleSheet);
//             root.name = "FP-Root";
//
//             Label label = new Label(Name);
//             label.name = "FP-Root-Label";
//
//             VisualElement content = new VisualElement();
//             content.name = "FP-Content";
//
//             Draw(content);
//
//             root.Add(label);
//             root.Add(content);
//             
//             return root;
//         }
//     }
//
//
//     public class FPVector3Inspector : Inspector<FPVector3>
//     {
//         public const int DefaultPrecision = 5;
//
//         public static StyleSheet StyleSheet =
//             AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/Extensions/FPMath/Editor/Styles/FPInspectors.uss");
//
//         public const string FPVECTOR2_X = "X";
//         public const string FPVECTOR2_Y = "Y";
//         public const string FPVECTOR2_Z = "Z";
//
//         public const string LABEL_X = "FP-Label-X";
//         public const string LABEL_Y = "FP-Label-Y";
//         public const string LABEL_Z = "FP-Label-Z";
//
//         public static float GetRawAsFloat(long rawValue)
//         {
//             var f = FP.FromRaw(rawValue);
//             var precision = DefaultPrecision;
//             var v = (Single) Math.Round(f.AsFloat, precision);
//             return v;
//         }
//
//         public bool Draw(VisualElement parent)
//         {
//             // grab value
//             var vx = GetRawAsFloat(Target.x.RawValue);
//             var vy = GetRawAsFloat(Target.y.RawValue);
//             var vz = GetRawAsFloat(Target.z.RawValue);
//
//             // edit value
//             try
//             {
//                 var floatFieldX = new FloatField(FPVECTOR2_X);
//                 floatFieldX.labelElement.name = LABEL_X;
//                 floatFieldX.value = vx;
//
//                 var labelFieldX = new Label("(FP)");
//                 labelFieldX.name = "FP-Name";
//
//                 var inputFieldX = floatFieldX.Q<VisualElement>("unity-text-input");
//                 inputFieldX.Add(labelFieldX);
//
//                 floatFieldX.RegisterValueChangedCallback(evt =>
//                 {
//                     Target = new FPVector3(FP.FromFloat(evt.newValue), Target.y, Target.z);
//                 });
//
//
//                 var floatFieldY = new FloatField(FPVECTOR2_Y);
//                 floatFieldY.labelElement.name = LABEL_Y;
//                 floatFieldY.value = vy;
//
//                 var labelFieldY = new Label("(FP)");
//                 labelFieldY.name = "FP-Name";
//
//                 var inputFieldY = floatFieldY.Q<VisualElement>("unity-text-input");
//                 inputFieldY.Add(labelFieldY);
//
//                 floatFieldY.RegisterValueChangedCallback(evt =>
//                 {
//                     Target = new FPVector3(Target.x, FP.FromFloat(evt.newValue), Target.z);
//                 });
//                 
//                 
//                 var floatFieldZ = new FloatField(FPVECTOR2_Z);
//                 floatFieldZ.labelElement.name = LABEL_Z;
//                 floatFieldZ.value = vy;
//
//                 var labelFieldZ = new Label("(FP)");
//                 labelFieldZ.name = "FP-Name";
//
//                 var inputFieldZ = floatFieldZ.Q<VisualElement>("unity-text-input");
//                 inputFieldZ.Add(labelFieldZ);
//
//                 floatFieldZ.RegisterValueChangedCallback(evt =>
//                 {
//                     Target = new FPVector3(Target.x, Target.y, FP.FromFloat(evt.newValue));
//                 });
//
//                 parent.Add(floatFieldX);
//                 parent.Add(floatFieldY);
//                 parent.Add(floatFieldZ);
//                 return true;
//             }
//             catch (FormatException exp)
//             {
//                 if (exp.Message != ".")
//                 {
//                     Debug.LogException(exp);
//                 }
//             }
//
//             return false;
//         }
//
//         public override VisualElement Build()
//         {
//             VisualElement root = new VisualElement();
//             root.styleSheets.Add(StyleSheet);
//             root.name = "FP-Root";
//
//             Label label = new Label(Name);
//             label.name = "FP-Root-Label";
//
//             VisualElement content = new VisualElement();
//             content.name = "FP-Content";
//
//             Draw(content);
//
//             root.Add(label);
//             root.Add(content);
//
//             return root;
//         }
//     }
// }